#include "defines.h"
#include "lib.h"
#include "serial.h"
#include "consdrv.h"

// consdrvを介さず直接出力。主にデバッグ用。一時的でない使用は排他に注意。

void putc_k(int c)
{
    if (c == '\n') serial_send_byte(SERIAL_DEFAULT_DEVICE, '\r');
    serial_send_byte(SERIAL_DEFAULT_DEVICE, c);
}

void puts_k(const char *str)
{
    while (*str) putc_k(*str++);
}

void putval_k(unsigned long value, int column)
{
    char buf[11];
    int len;

    len = ltos(value, buf);

    for (; column > len; column--) {
        putc_k('0');
    }

    puts_k(buf);
}

void putxval_k(unsigned long value, int column)
{
    char buf[9];
    int len;

    len = xtos(value, buf);

    for (; column > len; column--) {
        putc_k('0');
    }

    puts_k(buf);
}

// consdrvによる出力。カーネル内からは呼べない。

void putc(int c)
{
    cons_putc(c);
}

void puts(const char *str)
{
    cons_write(str, strlen(str));
}

void putval(unsigned long value, int column)
{
    char buf[11];
    int len;

    len = ltos(value, buf);

    while (column > len) {
        putc('0');
        column--;
    }

    puts(buf);
}

void putxval(unsigned long value, int column)
{
    char buf[9];
    int len;

    len = xtos(value, buf);

    while (column > len) {
        putc('0');
        column--;
    }

    puts(buf);
}
